• Viernes 8 de Noviembre de 2024, 12:56

Autor Tema:  error 49: la convencion de llamadas a dll es incorrecta  (Leído 3542 veces)

johndoe90

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
error 49: la convencion de llamadas a dll es incorrecta
« en: Lunes 11 de Mayo de 2009, 16:29 »
0
Hola, estoy haciendo un programilla de VB 6.0 a partir de una dll en C++, y me da este error en la siguiente linea:

Alguien sabe el motivo o como solucionarlo?

Gracias.

Adjunto codigo:

Option Explicit


Private Sub Command1_Click()
Dim name As String
Dim cpu As Single
Dim mem As Long

name = "                    "
name_in.Text = name
cpu_in.Text = cpu
mem_in.Text = mem

DLLpon_imageName (name)
DLLpon_cpuUsage (cpu)
DLLpon_memUsage (mem)
MsgBox "Datos introducidos correctamente"


End Sub

Private Sub Command2_Click()
Dim palabra As String
Dim cpuUsage As Single
Dim memUsage As Long
palabra = "                  "

DLLdame_imageName (palabra)
DLLdame_cpuUsage (cpuUsage)
DLLdame_memUsage (memUsage)

name_out.Text = palabra
cpu_out.Text = cpuUsage
mem_out.Text = memUsage

End Sub


Codigo C++

typedef char Tpalabra [20];

class CProcess
{
private:
   Tpalabra imageName;
   float cpuUsage;
   int memUsage;

public:
   void pon_imageName(Tpalabra name);
   Tpalabra* dame_imageName();
   void pon_cpuUsage(float cpu);
   float dame_cpuUsage();
   void pon_memUsage(int mem);
   int dame_memUsage();
   float valor_inicial_cpu();
   int valor_inical_mem();
};

#include "CProcess.h"
#include <string.h>

float CProcess::valor_inicial_cpu()
{
   return cpuUsage;
}

int CProcess::valor_inical_mem()
{
   return memUsage;
}


void CProcess::pon_imageName(Tpalabra name)
{
   strcpy(imageName,name);
}

Tpalabra* CProcess::dame_imageName()
{
   return (&imageName);
}

void CProcess::pon_cpuUsage(float cpu)
{
   cpuUsage=cpu;
}

float CProcess::dame_cpuUsage()
{
   return (cpuUsage);
}

void CProcess::pon_memUsage(int mem)
{
   memUsage=mem;
}

int CProcess::dame_memUsage()
{
   return (memUsage);
}

LIBRARY CProcess.dll
DESCRIPTION 'Dll CProcess'
HEAPSIZE 4024

EXPORTS
      DLLpon_imageName   @1
      DLLdame_imageName  @2
      DLLpon_cpuUsage    @3
      DLLdame_cpuUsage   @4
      DLLpon_memUsage    @5
      DLLdame_memUsage   @6


#include "Windows.h"
#include "CProcess.h"

CProcess my_Process;

void FAR PASCAL DLLpon_imageName(Tpalabra name)
{
   my_Process.pon_imageName(name);
}

void FAR PASCAL DLLdame_imageName(Tpalabra name)
{
   strcpy(name,*my_Process.dame_imageName());
}

void FAR PASCAL DLLpon_cpuUsage(float cpu)
{
   my_Process.pon_cpuUsage(cpu);
}

float FAR PASCAL DLLdame_cpuUsage()
{
   return my_Process.dame_cpuUsage();
}

void FAR PASCAL DLLpon_memUsage(int mem)
{
   my_Process.pon_memUsage(mem);
}

int FAR PASCAL DLLdame_memUsage()
{
   return my_Process.dame_memUsage();
}

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: error 49: la convencion de llamadas a dll es incorrecta
« Respuesta #1 en: Lunes 11 de Mayo de 2009, 20:30 »
0
Cita de: "johndoe90"
Hola, estoy haciendo un programilla de VB 6.0 a partir de una dll en C++, y me da este error en la siguiente linea:

Alguien sabe el motivo o como solucionarlo?

...
Dim cpu As Single
DLLpon_cpuUsage (cpu)
MsgBox "Datos introducidos correctamente"

...

Dim cpuUsage As Single

DLLdame_cpuUsage (cpuUsage)
Supongo que la línea a la que te refieres es a la que has marcado en negrita....

----------

Post data: Me edito no había leído que más abajo incluías parte del código que estás usando:

Código: Visual Basic
  1.  
  2. float FAR PASCAL DLLdame_cpuUsage()
  3. {
  4. return my_Process.dame_cpuUsage();
  5. }
  6.  
  7.  

Como puedes ver esa declaración no utiliza parámetros...
entonces tu código debería quedar así:

Código: Visual Basic
  1.  
  2. ' esto es lo que has puesto:
  3. DLLdame_cpuUsage (cpuUsage)
  4.  
  5. ' y esto es lo que debes poner:
  6. cpuUsage= DLLdame_cpuUsage ()
  7.  
  8.  
  9.  
«Ma non troppo»
----> ModoVacaciones = False<----

johndoe90

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: error 49: la convencion de llamadas a dll es incorrecta
« Respuesta #2 en: Jueves 14 de Mayo de 2009, 12:46 »
0
Entonces si quisiera que me retornase un valor deberia escrbirse asi?

float FAR PASCAL DLLdame_cpuUsage(float cpuUsage)
{
   return my_Process.dame_cpuUsage(cpuUsage);
}

Yo lo que quiero es que me retorne el valor previamente introducido en esa variable float.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: error 49: la convencion de llamadas a dll es incorrecta
« Respuesta #3 en: Jueves 14 de Mayo de 2009, 16:22 »
0
(REPE)
« última modificación: Jueves 14 de Mayo de 2009, 16:26 por m0skit0 »

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: error 49: la convencion de llamadas a dll es incorrecta
« Respuesta #4 en: Jueves 14 de Mayo de 2009, 16:26 »
0
Vamos a ver, si ya te lo ha puesto Nebire BIEN CLARITO.

En VB deberías poner:

Código: Visual Basic
  1. cpuUSage = DLLdame_cpuUsage()
  2.  
En C (la DLL):

Código: C
  1. float FAR PASCAL DLLdame_cpuUsage()
  2. {
  3.     return my_Process.dame_cpuUsage(cpuUsage);
  4. }
  5.  
Ah, y usa las etiquetas de código.  :hola:

johndoe90

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: error 49: la convencion de llamadas a dll es incorrecta
« Respuesta #5 en: Lunes 18 de Mayo de 2009, 15:58 »
0
Solucionado.